#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <pthread.h>
#include <iostream>

#define KEY_FILE_ADD "/dev/input/event0"  // 替换为实际的设备文件路径

// 定义互斥锁
pthread_mutex_t mutex;

static int a = 0;

// 按键监听线程函数
void* key_listener(void* arg) {
    int fd_key;
    int number = 0;
    struct input_event ev;

    // 打开输入设备文件
    fd_key = open(KEY_FILE_ADD, O_RDONLY);
    if (fd_key == -1) {
        perror("Failed to open device file");
        pthread_exit(NULL);
    }


    while (1) {
        // 读取输入事件
        if (read(fd_key, &ev, sizeof(ev)) == sizeof(ev)) {
            if (ev.type == EV_KEY && ev.value == 1) {  // 按键按下事件      /* EV_REP 表示连按 */

                // pthread_mutex_lock(&mutex);
                switch (ev.code)
                {
                case 2:
                    std::cout << "2" << std::endl;
                    break;
                
                case 3:
                    std::cout << "3" << std::endl;  
                    break;

                case 4:
                    std::cout << "4" << std::endl;
                    break;

                case 5:
                    std::cout << "5" << std::endl;
                    break;
                
                default:
                    break;
                }
                // pthread_mutex_unlock(&mutex);
            }
        }
    }

    // 关闭设备文件
    close(fd_key);
    pthread_exit(NULL);
}

// 图像处理线程函数
void* image_processor(void* arg) {
    while(1) {
        // pthread_mutex_lock(&mutex);
        // pthread_mutex_unlock(&mutex);
        sleep(1);
    }
}

int main() {
    pthread_t key_thread, image_thread;
    

    // 创建按键监听线程
    if (pthread_create(&key_thread, NULL, key_listener, NULL) != 0) {
        perror("Failed to create key listener thread");
        return EXIT_FAILURE;
    }

    // 创建图像处理线程
    if (pthread_create(&image_thread, NULL, image_processor, NULL) != 0) {
        perror("Failed to create image processor thread");
        return EXIT_FAILURE;
    }

    /* int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
     *
     * thread：指向 pthread_t 类型的指针，用于存储新创建线程的线程 ID
     * attr：指向 pthread_attr_t 类型的指针，用于设置线程的属性，若传入 NULL 则使用默认属性。
     * start_routine：指向线程函数的指针，该函数是新线程开始执行的入口点，其返回类型为 void*，参数类型为 void*
     * arg：传递给线程函数 start_routine 的参数，类型为 void*
     */

    // 等待线程结束（这里不会结束，因为是无限循环）
    pthread_join(key_thread, NULL);
    pthread_join(image_thread, NULL);

    return EXIT_SUCCESS;
}